
#include "c_common.h"


/*
 * 功能：从name配置文件中获取key对应的值并存储在buf中
 *
 * 参数：
 *      name:配置文件绝对路径
 *      key：配置项的key
 *      buf：存储获取的value值
 *
 * 返回值：
 *      0：成功 -1 失败
 */
int ini_get( char *name, char *key, char *buf );


/*
 * 功能：从name配置文件中将key对应的值设置为value
 *
 * 参数：
 *      name:配置文件绝对路径
 *      key：配置项的key
 *      value：需要设置的value值
 *
 * 返回值：
 *      0：成功 -1 失败
 */
int ini_set( char *name, char *key, char *value );


/*
 * 功能：从name配置文件中获取key对应的值并存储在buf中
 *
 * 参数：
 *      name:配置文件绝对路径
 *      key：配置项的key
 *      buf：存储获取的value值
 *
 * 返回值：
 *      0：成功 -1 失败
 */
int ini_get( char *name, char *key, char *buf )
{
	int	err    = -1;
	int	ok     = 0;
	if ( access( name, 0 ) ) /* 如果文件不存在 */
	{
		ini_set( name, key, "-1" );
		return(err);
	}

	/* 如果文件存在 */
	char bufLine[1024];

	FILE *fpRead = fopen( name, "r" );

	while ( !feof( fpRead ) )               /* 按行读取 */
	{
		memset( bufLine, 0, 1024 );
		fscanf( fpRead, "%s", bufLine );

		if ( bufLine[0] == '#' )        /* 如果是注释 */
			continue;
		if ( strstr( bufLine, key ) )   /* 如果存在且没有设置 */
		{
			char *p = strstr( bufLine, "=" );
			if ( p )
			{
				/* printf( "%s\n", p ); */
				sprintf( buf, "%s", p + 1 );
				fclose( fpRead );
				return(ok);
			}
		}
	}

	fclose( fpRead );

	return(err);
}

/*
 * 功能：从name配置文件中将key对应的值设置为value
 *
 * 参数：
 *      name:配置文件绝对路径
 *      key：配置项的key
 *      value：需要设置的value值
 *
 * 返回值：
 *      0：成功 -1 失败
 */

int ini_set( char *name, char *key, char *value )
{
	if ( access( name, 0 ) )                /* 如果文件不存在 */
	{
		char buf[100] = { 0 };
		sprintf( buf, "%s", name );

		char *dir = strrchr( buf, '/' );
		if ( dir )                      /* 如果存在父目录 */
		{
			dir[0] = '\0';
			mkdirs( buf );
		}

		FILE *fp = fopen( name, "w" );  /* 创建文件并清空 */
		sprintf( buf, "%s=%s\n", key, value );
		fputs( buf, fp );
		fclose( fp );
		return(0);
	}

	/* 如果文件存在 */

	char	bufRead[1024 * 5] = { 0 };
	char	bufLine[1024];
	int	len;
	int	isFind = 0;

	FILE *fpRead = fopen( name, "r" );

	while ( !feof( fpRead ) )                                               /* 按行读取 */
	{
		memset( bufLine, 0, 1024 );
		fgets( bufLine, 1024, fpRead );
		/* printf("[%s]\n",bufLine); */

		if ( !isFind && strstr( bufLine, key ) && bufLine[0] != '#' )   /* 如果存在且没有设置 */
		{
			char *p = strstr( bufLine, "=" );
			if ( p )
			{
				memset( bufLine, 0, 1024 );
				sprintf( bufLine, "%s=%s\n", key, value );
				isFind = 1;
			}
		}

		if ( strlen( bufLine ) == 0 )
			continue;
		strcat( bufRead, bufLine );
	}

	if ( !isFind ) /* 如果未找到这个key */
	{
		memset( bufLine, 0, 1024 );
		sprintf( bufLine, "%s=%s\n", key, value );
		strcat( bufRead, bufLine );
	}

	fclose( fpRead );

	len = strrchr( bufRead, '\0' ) - bufRead;

	fpRead = fopen( name, "w" );
	fwrite( bufRead, 1, len, fpRead );
	fclose( fpRead );
}


int main()
{
	char	* PATH_CONFIG  = "/tmp/hconfig/hconfig.ini";
	char	* KEY	       = "LOG_CNT";
	char	buf[100];

	ini_set( PATH_CONFIG, KEY, "4" );
	ini_set( PATH_CONFIG, "test", "-5" );
	ini_set( PATH_CONFIG, "what", "-5" );
	ini_set( PATH_CONFIG, "whataaa", "-5" );
	ini_get( PATH_CONFIG, KEY, buf);
	printf( "read:%s =  %s\n", KEY, buf );

	return(0);
}


